iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 4
1
自我挑戰組

作業系統概論系列 第 4

DAY4 處理器概念(上)

  • 分享至 

  • xImage
  •  

行程(Process)的基本概念

  • 作業系統執行時有多種程式方式:
  1. 工作方面--批次系統(Batch System)。
  2. 使用者和任務方面--分時系統(Time shared systems)。
  • 所謂的行程,就是程式在執行;而行程執行時,需要依照程式的順序來執行。
  • 行程的組成部分可分為4項:
  1. 行程的程式碼,稱作為text section。
  2. 一些數據會暫時儲存在Stack裡面,執行完畢會刪除,如:Function parameters、return addresses等。
  3. 在數據中,包含了global variables。
  4. 在執行期間,有些動態的數據會被分配存在Heap裡面。
  • 程式(Program)是「主動」儲存在硬碟裡;行程(Process)是「被動」儲存在硬碟中。
  1. 當在執行的檔案載入記憶體時,程式就成為行程。
  • 一個程式,可以對到多個行程。
  1. 如多個使用者可以同時一起使用相同的程式。

行程狀態

  • 當行程在執行時,它的狀態可以隨時改變。
  1. new:新增行程。
  2. running:依照指令執行。
  3. wating:當有其他事件發生,屬於優先順序時,會進入暫停等待。
  4. ready:已經就緒,等待分配進入處理器。
  5. terminated:行程結束。

行程控制區塊(Process Control Block,PCB)

  • PCB裡內含行程的基本資料,以及連結著每一個行程,所以也稱作為「任務控制區塊(task control block)」。
  1. 行程狀態(Process state):running、waiting等。
  2. 行程計數器(Process counter):表示下個指令位置在哪裡。
  3. CPU暫存器(CPU registers):當行程被插斷後,儲存在CPU暫存器的內容。
  4. CPU排程(CPU scheduling):選擇優先順序的行程。
  5. 記憶體(Memory):管理分配給行程的記憶體資料、打開了那些檔案。
  6. 紀錄(Accounting):紀錄CPU使用狀態、時間等。
  7. I/O狀態敘述(I/O status information):打開文件列表,將I/O裝置分配給行程。

執行緒(Threads)

  • 每一行程都擁有單一執行緒去執行。
  • 每一行程擁有多個程式計數器。
  1. 在執行當下,可以多個位置一起執行(平行執行)。
  • 須有行程詳細的細節儲存,多個程式計數器儲存在PCB裡。

行程排程(Process Schedular)

  • 目的:讓CPU使用效能能達到最大化。
  • 選擇可執行、可使用的行程給CPU執行。
  • 包含行程排程佇列:
  1. 工作佇列(Job Queue):組合所有行程到系統中。
  2. 就緒佇列(Ready Queue):組合所有行程在記憶體中,讓它們等待、就緒去執行。
  3. 裝置佇列(Device Queue):組合所有行程等待I/O裝置。
  4. 行程可移到多個佇列中。

排程(Sedular)

  • 短期佇列(Short-term Schedular):
  1. 選擇在記憶體內的那些行程去控制CPU。
  2. 常使用,所以速度迅速(milliseconds)。
  • 長期佇列(Long-term Schedular):
  1. 決定要把哪些行程放入記憶體裡。
  2. 決定要把行程搬離記憶體獲搬入記憶體。
  3. 決定多少行程在記憶體中。
    4.不常使用,速度較慢(seconds,minutes)。
  • 安排CPU的時間:
    1.I/O-bound process:傾向於處理輸出入作業,如撥放影片。此時I/O週期長於CPU週期。
    2.CPU-bond process:傾向於處理大量計算的工作,如何核電廠的模擬。此時CPU週期長於I/O週期。

中期排程(Medium Term Scheduling)

  • swapping:當出現特定狀況或系統負荷量過大時,會另一部分的行程從記憶體中移出,降低負荷量。當一部分程式完成時,會再載入之前移出的行程,使其繼續進行工作。

移動系統中的多任務處理

  • 某些移動系統中,允許只有一個行程執行,其餘的先暫停。
  • 使用者介面會限制iOS提供:
  1. 單一前景行程:透過UI控制。
  2. 多個背景行程:在記憶體中執行,但不會顯示出來且有所限制。
  • Andorid在執行前景和背景時,會有些許的限制:
  1. 背景行程使用Service去執行任務。
  2. 即便背景行程暫停,Service也可以持續執行。
  3. Service沒有UI只有使用少許記憶體。

執行環境改變

  • 當CPU要改變環境時,會先儲存舊行程的狀態,再進行環境改變,將舊行程狀態載入新行程中。
  • 由PCB表現行程的環境。
  • 每個CPU可以暫存好多環境,當要使用時無須重新下載,直接使用可以使環境改變加快。
  • 執行環境改變對系統來說是一個過大的負荷量,所以如果OS設計繁雜,將會使系統效能下降、耗時、CPU使用率降低。

行程新增

  • 父行程會新增多個子行程,而這些行程將會成為一個樹狀結構。
  • 透過process identifier(pid)辨識與管理行程。
  • 父、子行程間的資源分配方式:
  1. 父、子行程間共享資源。
  2. 子行程共享父行程的部分資源。
    3.父、子行程間不共享資源。
  • 位址空間:
  1. 父行程新增重複子行程。
  2. 子行程的程式會下載進入位置空間。
  • UNIX的範例:
  1. 使用系統呼叫--fork( )新增行程。
  2. 在使用fork( )之後,會使用exec( )方法,使新程式取代行程記憶體。

行程結束

  • 當行程執行到最後一句時,會透過系統呼叫-exit( )將所得資源還回去,並告知OS行程已完成。
  1. 子行程會透過wait( )方式,將數據狀態傳回父行程。
  • 父行程會透過系統呼叫-abort( )結束子行程,原因有以下這些:
  1. 避免子行程使用過多資源。
  2. 避免子行程無法自己結束,將會形成「孤兒」。
  • 有些OS會不允許當父行程結束時,子行程未結束,所以會讓所有子行程都結束。
  • 父行程可能會等待子行程使用wait( ),傳回狀態訊息;當狀態訊息回傳之後,行程的pid會終止。
  • 當子行程結束,卻發現沒有父行程在等待,此子行程會變成「殭屍」(zombie)。
  • 當父行程結束卻沒有使用wait( )等待子行程,此時,子行程會變成「孤兒」(orphan)。

多行程架構-Chrome Browser

  • 許多網頁瀏覽器會單一執行行程。
  1. 當網頁當機時,瀏覽器可能會掛著或著崩潰。
  • Google瀏覽器使用3種行程架構:
  1. Browser行程管理UI、硬碟、I/O網路。
  2. Renderer行程給予網頁處理HTML、Java。

上一篇
DAY3 作業系統架構(下)
下一篇
DAY5 處理器概念(中)
系列文
作業系統概論30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言